home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / gaim / prpl.h < prev    next >
C/C++ Source or Header  |  2005-10-18  |  11KB  |  339 lines

  1. /**
  2.  * @file prpl.h Protocol Plugin functions
  3.  * @ingroup core
  4.  *
  5.  * gaim
  6.  *
  7.  * Gaim is the legal property of its developers, whose names are too numerous
  8.  * to list here.  Please refer to the COPYRIGHT file distributed with this
  9.  * source distribution.
  10.  *
  11.  * This program is free software; you can redistribute it and/or modify
  12.  * it under the terms of the GNU General Public License as published by
  13.  * the Free Software Foundation; either version 2 of the License, or
  14.  * (at your option) any later version.
  15.  *
  16.  * This program is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  * GNU General Public License for more details.
  20.  *
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with this program; if not, write to the Free Software
  23.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  24.  */
  25.  
  26. /* this file should be all that prpls need to include. therefore, by including
  27.  * this file, they should get glib, proxy, gaim_connection, prpl, etc. */
  28.  
  29. #ifndef _GAIM_PRPL_H_
  30. #define _GAIM_PRPL_H_
  31.  
  32. typedef struct _GaimPluginProtocolInfo GaimPluginProtocolInfo;
  33.  
  34. /**************************************************************************/
  35. /** @name Basic Protocol Information                                      */
  36. /**************************************************************************/
  37. /*@{*/
  38.  
  39. /** Default protocol plugin description */
  40. #define GAIM_PRPL_DESC(x) \
  41.         "Allows gaim to use the " (x) " protocol.\n\n"      \
  42.         "Now that you have loaded this protocol, use the "  \
  43.         "Account Editor to add an account that uses this "  \
  44.         "protocol. You can access the Account Editor from " \
  45.         "the \"Accounts\" button on the login window or "   \
  46.         "in the \"Tools\" menu in the buddy list window."
  47.  
  48. /** Default protocol */
  49. #define GAIM_PROTO_DEFAULT "prpl-oscar"
  50.  
  51. /*@}*/
  52.  
  53. /**
  54.  * Flags applicable to outgoing/incoming IMs from prpls.
  55.  */
  56. typedef enum
  57. {
  58.     GAIM_CONV_IM_AUTO_RESP = 0x0001,    /**< Auto response.    */
  59.     GAIM_CONV_IM_IMAGES    = 0x0002     /**< Contains images.  */
  60. } GaimConvImFlags;
  61.  
  62. typedef enum
  63. {
  64.     GAIM_CONV_CHAT_WHISPER = 0x0001,    /**< Whispered message.*/
  65.     GAIM_CONV_CHAT_DELAYED = 0x0002     /**< Delayed message.  */
  66.  
  67. } GaimConvChatFlags;
  68.  
  69. typedef enum {
  70.     GAIM_ICON_SCALE_DISPLAY = 0x01,        /**< We scale the icon when we display it */
  71.     GAIM_ICON_SCALE_SEND = 0x02            /**< We scale the icon before we send it to the server */
  72. } GaimIconScaleRules;
  73.  
  74.  
  75. /**
  76.  * A description of a Buddy Icon specification.  This tells Gaim what kind of image file
  77.  * it should give this prpl, and what kind of image file it should expect back.
  78.  * Dimensions less than 1 should be ignored and the image not scaled.
  79.  */
  80. typedef struct {
  81.     char *format;                       /**< This is a comma-delimited list of image formats or NULL if icons are not supported. 
  82.                          * The core nor the prpl will actually check to see if the data it's given matches this, it's entirely
  83.                          * up to the UI to do what it wants */
  84.     int min_width;                          /**< The minimum width of this icon  */
  85.     int min_height;                         /**< The minimum height of this icon */
  86.     int max_width;                          /**< The maximum width of this icon  */
  87.     int max_height;                         /**< The maximum height of this icon */
  88.     GaimIconScaleRules scale_rules;        /**< How to stretch this icon */
  89. } GaimBuddyIconSpec;
  90.  
  91. /* This #define exists just to make it easier to fill out the buddy icon field in he prpl info struct for protocols that couldn't care less. */
  92. #define NO_BUDDY_ICONS {NULL, 0, 0, 0, 0, 0}
  93.  
  94. #include "blist.h"
  95. #include "proxy.h"
  96. #include "plugin.h"
  97.  
  98. struct proto_chat_entry {
  99.     char *label;
  100.     char *identifier;
  101.     gboolean is_int;
  102.     int min;
  103.     int max;
  104.     gboolean secret;
  105. };
  106.  
  107. /**
  108.  * Protocol options
  109.  *
  110.  * These should all be stuff that some plugins can do and others can't.
  111.  */
  112. typedef enum
  113. {
  114.     /**
  115.      * Use a unique name, not an alias, for chat rooms.
  116.      *
  117.      * Jabber lets you choose what name you want for chat.
  118.      * So it shouldn't be pulling the alias for when you're in chat;
  119.      * it gets annoying.
  120.      */
  121.     OPT_PROTO_UNIQUE_CHATNAME = 0x00000004,
  122.  
  123.     /**
  124.      * Chat rooms have topics.
  125.      *
  126.      * IRC and Jabber support this.
  127.      */
  128.     OPT_PROTO_CHAT_TOPIC = 0x00000008,
  129.  
  130.     /**
  131.      * Don't require passwords for sign-in.
  132.      *
  133.      * Zephyr doesn't require passwords, so there's no need for
  134.      * a password prompt.
  135.      */
  136.     OPT_PROTO_NO_PASSWORD = 0x00000010,
  137.  
  138.     /**
  139.      * Notify on new mail.
  140.      *
  141.      * MSN and Yahoo notify you when you have new mail.
  142.      */
  143.     OPT_PROTO_MAIL_CHECK = 0x00000020,
  144.  
  145.     /**
  146.      * Buddy icon support.
  147.      *
  148.      * Oscar and Jabber have buddy icons.
  149.      *
  150.      * *We'll do this a bit more sophisticated like, now.
  151.      *
  152.      * OPT_PROTO_BUDDY_ICON = 0x00000040,
  153.      */
  154.  
  155.     /**
  156.      * Images in IMs.
  157.      *
  158.      * Oscar lets you send images in direct IMs.
  159.      */
  160.     OPT_PROTO_IM_IMAGE = 0x00000080,
  161.  
  162.     /**
  163.      * Allow passwords to be optional.
  164.      *
  165.      * Passwords in IRC are optional, and are needed for certain
  166.      * functionality.
  167.      */
  168.     OPT_PROTO_PASSWORD_OPTIONAL = 0x00000100,
  169.  
  170.     /**
  171.      * Allows font size to be specified in sane point size
  172.      *
  173.      * Probably just Jabber and Y!M
  174.      */
  175.     OPT_PROTO_USE_POINTSIZE = 0x00000200,
  176.  
  177.     /**
  178.      * Don't normalize buddy names for conversations
  179.      *
  180.      * Probably just Jabber (so resources don't get stripped)
  181.      */
  182.     OPT_PROTO_NO_NORMALIZE_CONV = 0x00000400
  183.  
  184. } GaimProtocolOptions;
  185.  
  186. /** Custom away message. */
  187. #define GAIM_AWAY_CUSTOM _("Custom")
  188.  
  189. /** Some structs defined in roomlist.h */
  190. struct _GaimRoomlist;
  191. struct _GaimRoomlistRoom;
  192.  
  193. /**
  194.  * A protocol plugin information structure.
  195.  *
  196.  * Every protocol plugin initializes this structure. It is the gateway
  197.  * between gaim and the protocol plugin.
  198.  */
  199. struct _GaimPluginProtocolInfo
  200. {
  201.     GaimProtocolOptions options;  /**< Protocol options.          */
  202.  
  203.     GList *user_splits;      /* A GList of GaimAccountUserSplit */
  204.     GList *protocol_options; /* A GList of GaimAccountOption    */
  205.     
  206.     GaimBuddyIconSpec icon_spec; /* The icon spec. */
  207.     
  208.     /**
  209.      * Returns the base icon name for the given buddy and account.
  210.      * If buddy is NULL, it will return the name to use for the account's icon
  211.      */
  212.     const char *(*list_icon)(GaimAccount *account, GaimBuddy *buddy);
  213.  
  214.     /**
  215.      * Fills the four char**'s with string identifiers for "emblems"
  216.      * that the UI will interpret and display as relevant
  217.      */
  218.     void (*list_emblems)(GaimBuddy *buddy, char **se, char **sw,
  219.                           char **nw, char **ne);
  220.  
  221.     /**
  222.      * Gets a short string representing this buddy's status.  This will
  223.      * be shown on the buddy list.
  224.      */
  225.     char *(*status_text)(GaimBuddy *buddy);
  226.  
  227.     /**
  228.      * Gets a string to put in the buddy list tooltip.
  229.      */
  230.     char *(*tooltip_text)(GaimBuddy *buddy);
  231.  
  232.     GList *(*away_states)(GaimConnection *gc);
  233.  
  234.     GList *(*blist_node_menu)(GaimBlistNode *node);
  235.     GList *(*chat_info)(GaimConnection *);
  236.     GHashTable *(*chat_info_defaults)(GaimConnection *, const char *chat_name);
  237.  
  238.     /* All the server-related functions */
  239.     void (*login)(GaimAccount *);
  240.     void (*close)(GaimConnection *);
  241.     int  (*send_im)(GaimConnection *, const char *who,
  242.                     const char *message,
  243.                     GaimConvImFlags flags);
  244.     void (*set_info)(GaimConnection *, const char *info);
  245.     int  (*send_typing)(GaimConnection *, const char *name, int typing);
  246.     void (*get_info)(GaimConnection *, const char *who);
  247.     void (*set_away)(GaimConnection *, const char *state, const char *message);
  248.     void (*set_idle)(GaimConnection *, int idletime);
  249.     void (*change_passwd)(GaimConnection *, const char *old_pass,
  250.                           const char *new_pass);
  251.     void (*add_buddy)(GaimConnection *, GaimBuddy *buddy, GaimGroup *group);
  252.     void (*add_buddies)(GaimConnection *, GList *buddies, GList *groups);
  253.     void (*remove_buddy)(GaimConnection *, GaimBuddy *buddy, GaimGroup *group);
  254.     void (*remove_buddies)(GaimConnection *, GList *buddies, GList *groups);
  255.     void (*add_permit)(GaimConnection *, const char *name);
  256.     void (*add_deny)(GaimConnection *, const char *name);
  257.     void (*rem_permit)(GaimConnection *, const char *name);
  258.     void (*rem_deny)(GaimConnection *, const char *name);
  259.     void (*set_permit_deny)(GaimConnection *);
  260.     void (*warn)(GaimConnection *, const char *who, gboolean anonymous);
  261.     void (*join_chat)(GaimConnection *, GHashTable *components);
  262.     void (*reject_chat)(GaimConnection *, GHashTable *components);
  263.     char *(*get_chat_name)(GHashTable *components);
  264.     void (*chat_invite)(GaimConnection *, int id,
  265.                         const char *who, const char *message);
  266.     void (*chat_leave)(GaimConnection *, int id);
  267.     void (*chat_whisper)(GaimConnection *, int id,
  268.                          const char *who, const char *message);
  269.     int  (*chat_send)(GaimConnection *, int id, const char *message);
  270.     void (*keepalive)(GaimConnection *);
  271.  
  272.     /* new user registration */
  273.     void (*register_user)(GaimAccount *);
  274.  
  275.     /* get "chat buddy" info and away message */
  276.     void (*get_cb_info)(GaimConnection *, int, const char *who);
  277.     void (*get_cb_away)(GaimConnection *, int, const char *who);
  278.  
  279.     /* save/store buddy's alias on server list/roster */
  280.     void (*alias_buddy)(GaimConnection *, const char *who,
  281.                         const char *alias);
  282.  
  283.     /* change a buddy's group on a server list/roster */
  284.     void (*group_buddy)(GaimConnection *, const char *who,
  285.                         const char *old_group, const char *new_group);
  286.  
  287.     /* rename a group on a server list/roster */
  288.     void (*rename_group)(GaimConnection *, const char *old_name,
  289.                          GaimGroup *group, GList *moved_buddies);
  290.  
  291.     void (*buddy_free)(GaimBuddy *);
  292.  
  293.     void (*convo_closed)(GaimConnection *, const char *who);
  294.  
  295.     const char *(*normalize)(const GaimAccount *, const char *);
  296.  
  297.     void (*set_buddy_icon)(GaimConnection *, const char *filename);
  298.  
  299.     void (*remove_group)(GaimConnection *gc, GaimGroup *group);
  300.  
  301.     char *(*get_cb_real_name)(GaimConnection *gc, int id, const char *who);
  302.  
  303.     void (*set_chat_topic)(GaimConnection *gc, int id, const char *topic);
  304.  
  305.     GaimChat *(*find_blist_chat)(GaimAccount *account, const char *name);
  306.  
  307.     /* room listing prpl callbacks */
  308.     struct _GaimRoomlist *(*roomlist_get_list)(GaimConnection *gc);
  309.     void (*roomlist_cancel)(struct _GaimRoomlist *list);
  310.     void (*roomlist_expand_category)(struct _GaimRoomlist *list, struct _GaimRoomlistRoom *category);
  311.  
  312.     /* file transfer callbacks */
  313.     gboolean (*can_receive_file)(GaimConnection *, const char *who);
  314.     void (*send_file)(GaimConnection *, const char *who, const char *filename);
  315. };
  316.  
  317. #define GAIM_IS_PROTOCOL_PLUGIN(plugin) \
  318.     ((plugin)->info->type == GAIM_PLUGIN_PROTOCOL)
  319.  
  320. #define GAIM_PLUGIN_PROTOCOL_INFO(plugin) \
  321.     ((GaimPluginProtocolInfo *)(plugin)->info->extra_info)
  322.  
  323. #ifdef __cplusplus
  324. extern "C" {
  325. #endif
  326.  
  327. /**
  328.  * Finds a protocol plugin structure of the specified type.
  329.  *
  330.  * @param id The protocol plugin;
  331.  */
  332. GaimPlugin *gaim_find_prpl(const char *id);
  333.  
  334. #ifdef __cplusplus
  335. }
  336. #endif
  337.  
  338. #endif /* _PRPL_H_ */
  339.